//package com.peanut.youfupay.util;
//
//import com.alibaba.fastjson.JSON;
//import com.peanut.youfupay.entity.request.RequestMessage;
//import com.peanut.youfupay.entity.response.ResponseMessage;
//import com.peanut.youfupay.enums.FunCodeEnum;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.web.client.RestTemplate;
//
//import java.io.UnsupportedEncodingException;
//import java.util.HashMap;
//import java.util.Map;
//
//import static com.peanut.youfupay.constant.MerInfoConstant.*;
//
///**
// * 商户请求优付工具类
// *
// * @author peanut
// */
//@Slf4j
//@Component
//@Deprecated
//public class TestApplyYouFuPostUtil {
//    @Autowired
//    private RestTemplate restTemplate;
//
//    /**
//     * @param funCodeEnum funCode
//     * @param requestDTO  请求实体
//     * @return applyResult 请求结果
//     */
//    public <T> String applyYouFuByHttpPost(FunCodeEnum funCodeEnum, T requestDTO) {
//        Map<String, Object> httpRequestData = buildRequest(funCodeEnum, requestDTO);
//        String httpResponseData = sendToYouFu(httpRequestData);
//        String applyResult = handleResponse(httpResponseData);
//        return applyResult;
//    }
//
//    /**
//     * 构建请求报文：分为统一请求参数和业务参数两部分
//     *
//     * @param funCodeEnum funCode
//     * @param requestDTO  请求实体参数
//     * @return applyResult 请求结果
//     */
//    public <T> Map<String, Object> buildRequest(FunCodeEnum funCodeEnum, T requestDTO) {
//        log.info("构建请求报文开始:{}", requestDTO);
//        /**RequestMessage:统一请求参数 **/
//        RequestMessage requestMessage = new RequestMessage();
//        requestMessage.setReqId(funCodeEnum.getCode() + System.currentTimeMillis());
//        requestMessage.setMerId(MER_ID);
//        requestMessage.setVersion(API_VERSION);
//        requestMessage.setFunCode(funCodeEnum.getCode());
//        /**RequestMessage.setReqData:业务请求参数 **/
//        String reqData = JsonUtils.toJson(requestDTO);
//        /**DES 加密**/
//        byte[] bs = new byte[0];
//        try {
//            bs = DESUtils.encrypt(reqData.getBytes(CHARSET_UTF_8), INTER_KEY);
//        } catch (Exception e) {
//            log.error("加密异常={}", e);
//        }
//        /**Base64编码**/
//        String reqDataEncrypt = Base64Utils.encodeToString(bs);
//        requestMessage.setReqData(reqDataEncrypt);
////        //Remark1,Remark2 本是备用字段，签约接口临时用于验证身份证照片，大多数税源地签约不需要上传身份证照片，可删掉此逻辑
////        if (SIGN_CONTRACT == funCodeEnum) {
////            SignContract sign = (SignContract) requestDTO;
////            requestMessage.setRemark1(sign.getRemark1());
////            requestMessage.setRemark2(sign.getRemark2());
////        }
//        /**RequestMessage.setSign:签名**/
//        try {
//            requestMessage.setSign(RSAUtils.sign(reqDataEncrypt, MER_PRIVATE_KEY));
//        } catch (Exception e) {
//            log.error("签名异常={}", e);
//        }
//        String reqStr = JsonUtils.toJson(requestMessage);
//        Map<String, Object> requestMap = new HashMap<>(2);
//        requestMap.put("reqJson", reqStr);
//        log.info("构建请求报文结束-map{}", requestMap);
//        return requestMap;
//    }
//
//    /**
//     * 向优付发出HttpPost申请
//     *
//     * @param requestMap
//     * @return
//     */
//    public String sendToYouFu(Map<String, Object> requestMap) {
//        log.info("请求优付完整报文-map:{}", requestMap);
//        String resData = HttpClientHelper.httpClientPost(YOU_FU_URL, requestMap, CHARSET_UTF_8);
//        log.info("优付返回完整报文-resData:{}", resData);
//        return resData;
//    }
//
//    /**
//     * 构造返回结果
//     * 1、验签
//     * 2、解密
//     *
//     * @param httpResponseData
//     * @return
//     */
//    public String handleResponse(String httpResponseData) {
//        log.info("构建返回结果开始:{}", httpResponseData);
//        if (StringUtils.isBlank(httpResponseData)) {
//            log.error("优付同步返回结果为空");
//            return null;
//        }
//        ResponseMessage responseMessage = JSON.parseObject(httpResponseData, ResponseMessage.class);
//        boolean isVerifySuccess;
//        /** 验签 **/
//        try {
//            isVerifySuccess = RSAUtils.verify(responseMessage.getResData(), responseMessage.getSign(), YOU_FU_PUBLIC_KEY);
//        } catch (Exception e) {
//            log.error("验签异常={}", e);
//            return null;
//        }
//        if (!isVerifySuccess) {
//            log.error("验签失败");
//            return null;
//        }
//        log.info("验签结果-verifyResult:{}", isVerifySuccess);
//        /** Base64解编码 **/
//        byte[] base64bs = Base64Utils.decode(responseMessage.getResData());
//        /** DES 解密 **/
//        byte[] debs = new byte[0];
//        try {
//            debs = DESUtils.decrypt(base64bs, INTER_KEY);
//        } catch (Exception e) {
//            log.error("DES解密异常={}", e);
//        }
//        String resultData = null;
//        try {
//            resultData = new String(debs, CHARSET_UTF_8);
//        } catch (UnsupportedEncodingException e) {
//            log.error("编码格式转换异常={}", e);
//        }
//        log.info("构建返回结果结束:{}", resultData);
//        return resultData;
//    }
//
//}
